using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools
{
    /// <summary>
    /// <para>Map To KML</para>
    /// <para>3D Analyst Map to KML geoprocessing function</para>
    /// <para>3D Analyst 地图转 KML 地理处理功能</para>
    /// </summary>    
    [DisplayName("Map To KML")]
    public class MapToKML : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MapToKML()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_map">
        /// <para>Input Map</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_out_kmz_file">
        /// <para>Output File</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        public MapToKML(object _in_map, object _out_kmz_file)
        {
            this._in_map = _in_map;
            this._out_kmz_file = _out_kmz_file;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Map To KML";

        public override string CallName => "3d.MapToKML";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_map, _out_kmz_file, _map_output_scale, _is_composite.GetGPValue(), _is_vector_to_raster.GetGPValue(), _extent_to_export, _image_size, _dpi_of_client, _ignore_zvalue.GetGPValue()];

        /// <summary>
        /// <para>Input Map</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Map")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_map { get; set; }


        /// <summary>
        /// <para>Output File</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_kmz_file { get; set; }


        /// <summary>
        /// <para>Map Output Scale</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Map Output Scale")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _map_output_scale { get; set; } = 0;


        /// <summary>
        /// <para>Return single composite image</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Return single composite image")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_composite_value _is_composite { get; set; } = _is_composite_value._false;

        public enum _is_composite_value
        {
            /// <summary>
            /// <para>COMPOSITE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("COMPOSITE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_COMPOSITE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_COMPOSITE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Convert Vector to Raster</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Convert Vector to Raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_vector_to_raster_value _is_vector_to_raster { get; set; } = _is_vector_to_raster_value._false;

        public enum _is_vector_to_raster_value
        {
            /// <summary>
            /// <para>VECTOR_TO_IMAGE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("VECTOR_TO_IMAGE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>VECTOR_TO_VECTOR</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("VECTOR_TO_VECTOR")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Extent to Export</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Extent to Export")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _extent_to_export { get; set; } = null;


        /// <summary>
        /// <para>Size of returned image (pixels)</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Size of returned image (pixels)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _image_size { get; set; } = 1024;


        /// <summary>
        /// <para>DPI of output image</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("DPI of output image")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _dpi_of_client { get; set; } = 96;


        /// <summary>
        /// <para>Clamped features to ground</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clamped features to ground")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _ignore_zvalue_value _ignore_zvalue { get; set; } = _ignore_zvalue_value._true;

        public enum _ignore_zvalue_value
        {
            /// <summary>
            /// <para>CLAMPED_TO_GROUND</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLAMPED_TO_GROUND")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>ABSOLUTE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ABSOLUTE")]
            [GPEnumValue("false")]
            _false,

        }

        public MapToKML SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}